#ifndef __CRC_EXT_H_H_
#define __CRC_EXT_H_H_

#include "stdint.h"

#ifdef __cplusplus
extern "C"
{
#endif

	uint8_t crc4_itu_calc(uint8_t *dat, uint32_t length);			
	uint8_t crc5_epc_calc(uint8_t *dat, uint32_t length);			
	uint8_t crc5_itu_calc(uint8_t *dat, uint32_t length);			
	uint8_t crc5_usb_calc(uint8_t *dat, uint32_t length);			
	uint8_t crc6_itu_calc(uint8_t *dat, uint32_t length);			
	uint8_t crc7_mmc_calc(uint8_t *dat, uint32_t length);			
																	
	uint8_t crc8_calc(uint8_t *dat, uint32_t length);				
	uint8_t crc8_itu_calc(uint8_t *dat, uint32_t length);			
	uint8_t crc8_rohc_Calc(uint8_t *dat, uint32_t length);			
	uint8_t crc8_maxim_calc(uint8_t *dat, uint32_t length);			
	uint8_t crc8_cdma2000_calc(uint8_t *dat, uint32_t length);		
	uint8_t crc8_darc_calc(uint8_t *dat, uint32_t length);			
	uint8_t crc8_dvb_s2_calc(uint8_t *dat, uint32_t length);		
	uint8_t crc8_ebu_calc(uint8_t *dat, uint32_t length);			
	uint8_t crc8_i_code_calc(uint8_t *dat, uint32_t length);		
	uint8_t crc8_wcdma_calc(uint8_t *dat, uint32_t length);			
																	
	uint16_t crc16_ibm_calc(uint8_t *dat, uint32_t length);			
	uint16_t crc16_maxim_calc(uint8_t *dat, uint32_t length);		
	uint16_t crc16_usb_calc(uint8_t *dat, uint32_t length);			
	uint16_t crc16_modbus_calc(uint8_t *dat, uint32_t length);		
	uint16_t crc16_ccitt_calc(uint8_t *dat, uint32_t length);		
	uint16_t crc16_ccitt_false_calc(uint8_t *dat, uint32_t length); 
	uint16_t crc16_x25_calc(uint8_t *dat, uint32_t length);			
	uint16_t crc16_xmodem_calc(uint8_t *dat, uint32_t length);		
	uint16_t crc16_dnp_calc(uint8_t *dat, uint32_t length);			
	uint16_t crc16_aug_ccitt_calc(uint8_t *dat, uint32_t length);	
	uint16_t crc16_buypass_calc(uint8_t *dat, uint32_t length);		
	uint16_t crc16_cdma2000_calc(uint8_t *dat, uint32_t length);	
	uint16_t crc16_dds_110_calc(uint8_t *dat, uint32_t length);		
	uint16_t crc16_dect_r_calc(uint8_t *dat, uint32_t length);		
	uint16_t crc16_dect_x_calc(uint8_t *dat, uint32_t length);		
	uint16_t crc16_en_13757_calc(uint8_t *dat, uint32_t length);	
	uint16_t crc16_genibus_calc(uint8_t *dat, uint32_t length);		
	uint16_t crc16_mcrf4xx_calc(uint8_t *dat, uint32_t length);		
	uint16_t crc16_riello_calc(uint8_t *dat, uint32_t length);		
	uint16_t crc16_t10_dif_calc(uint8_t *dat, uint32_t length);		
	uint16_t crc16_teledisk_calc(uint8_t *dat, uint32_t length);	
	uint16_t crc16_tms37157_calc(uint8_t *dat, uint32_t length);	
	uint16_t crc16_a_calc(uint8_t *dat, uint32_t length);			
																	
	uint32_t crc32_calc(uint8_t *dat, uint32_t length);				
	uint32_t crc32_mpeg_2_calc(uint8_t *dat, uint32_t length);		
	uint32_t crc32_bzip2_calc(uint8_t *dat, uint32_t length);		
	uint32_t crc32_posix_calc(uint8_t *dat, uint32_t length);		
	uint32_t crc32_jamcrc_calc(uint8_t *dat, uint32_t length);		
	uint32_t crc32_xfer_calc(uint8_t *dat, uint32_t length);		
	uint32_t crc32_c_calc(uint8_t *dat, uint32_t length);			
	uint32_t crc32_d_calc(uint8_t *dat, uint32_t length);			
	uint32_t crc32_q_calc(uint8_t *dat, uint32_t length);			

	uint16_t mb_crc(const uint8_t *cframe, uint16_t len);
	uint16_t mb_crc_add_data(const uint8_t *cframe, uint16_t len, uint16_t crc_now);
	uint16_t mb_crc_add_byte(uint8_t c, uint16_t crc_now);

#ifdef __cplusplus
}
#endif

#endif 
